cuenta=0;

/*function logout(){
	var conf = true;
	if(confirm("Esta Seguro de Salir?")){
		open("http://www2.corporacionsybven.com:40000/xampp/rrhh/index.php?logout=true","_self");
	}else
		conf = false;							
	return conf;
}
*/
	function logout(){
            		  				var conf = true;
            						if(confirm("Esta Seguro de Salir?")){
            							open("../index.php?logout=true&pag=1","_self");
            						}else
            							conf = false;
            						return conf;
            					}
function MAYUSCULA(campo){
document.getElementById(campo).value=document.getElementById(campo).value.toUpperCase();
}

function teclapulsa(e){
            if ( window.event != null)         //IE4+
              tecla = window.event.keyCode;
            else if ( e != null )              //N4+ o W3C compatibles
                tecla = e.which;
            else
	               return;
            if (tecla == 13) {                 //se pulso enter
              return  false;
            }
}


function validar_formulario(formulario){
//Funcionalidad: Verifica si los campos cumple con las validaciond de:
/*
A ESTA FUNCION SOLO SE LE PASA EL NOMBRE DEL FORMULARIO
SE DEBE COLOCAR EL ID EN TODOS LOS OBJETOS DEL FORMULARIO Y CON EL FORMATO QUE SE DESCRIBE A CONTINUACION.

TXTC = SOLO CARACTERES
TXTN = SOLO NUMEROS
TXTAF = VALORES ALFANUMERICOS SOLAMENE.
R= sI ES REQUERIDO.
T = PARA VERIFICAR LA LONGITUD CON EL ULTIMO PARAMETRO DEL ID.
EJEMPLO:
TXTC_CAMPO_R_T_3-> EL 3 REPRESENTA EL MINIMO DE CARACTERES PERMITIOS.
*/
	
	totalcamp=document.getElementById(formulario).length;

	var error=true;
	var z=0;
	while ((z<totalcamp) && (error==true) ){
		campo=document.getElementById(formulario).elements[z].id;

		tipo_dato=campo.split("_");

			switch(tipo_dato[0]){

			case "TXTC":
			resultado=caracter(campo);// se verifica si es solamente caracteres
			if(resultado==false){
				alert("El campo "+document.getElementById(campo).title+" solo permite caracteres.");
				error=false;
				return false;
			}
			break;
			case "TXTN":
			resultado=numerico(campo);// se verifica si es solamente caracteres
			if(resultado==false){
				alert("El campo: "+document.getElementById(campo).title+" S\xf3lo permite valores num\xe9ricos.");
				error=false;
				return false;
			}
			break;

			case "TXTAF":
			resultado=alfanumerico(campo);// se verifica si es solamente caracteres
			if(resultado==false){
			alert("El campo: "+document.getElementById(campo).title+" S\xf3lo permite valores Alfanum\xe9ricos.");
				error=false;
				return false;
			}
			break;

			case "TXTMAIL":
				email_str=/^[^@\s]+@[^@\.\s]+(\.[^@\.\s]+)+$/;

					if(document.getElementById(campo).value != '') {
						if(!email_str.test(document.getElementById(campo).value)) {
						alert("El formato del campo email no es valido");
					return false;
					}
				}
			break;

		case "TXTNA":
			//EN CASI DE SER TEXTO Q ACEPTEN TECAL ENTER.
			break;
			
			
		}//LLave del switch
		//alert(campo+" - "+tipo_dato[2]+" - "+tipo_dato[0]);
		if((tipo_dato[2]=='R' || tipo_dato[2]=='R[]') && tipo_dato[0]=="LIST"){
			
			if(document.getElementById(campo).value=='N999' || document.getElementById(campo).value==''){
				//alert(campo+" - "+document.getElementById(campo).value);
				alert("Debe seleccionar "+document.getElementById(campo).title);
				error=false;
				return false;
			}
		}
		if(tipo_dato[2]=='R' && tipo_dato[0]!="LIST"){
			if(document.getElementById(campo).value==''){
			alert("Debe completar el campo: "+document.getElementById(campo).title);
			error=false;
			return false;
			}
		}

		if(tipo_dato[3]=='T'){
		if (document.getElementById(campo).value != ""){
			if (document.getElementById(campo).value.length < tipo_dato[4]){
			alert("El campo: "+document.getElementById(campo).title+" debe contener un m\xe1ximo de "+document.getElementById(campo).maxLength+" o un m\xednimo de "+tipo_dato[4]+" caracteres");

			a=	document.getElementById(campo);
			setTimeout('a.focus()',75);
			setTimeout('a.select()',75);
			error=false;
			return false;
			}
		}
	}
	if(tipo_dato[2]=='R'){
		if(document.getElementById(campo).value == 'seleccione'){
			alert("Debe seleccionar una opci\xf3n de la lista: "+document.getElementById(campo).title);
			error=false;
			return false;
		}
	}
		z++;
	}//LLave del while
	//error=false;
	//return false;
return (error);
}//llave de la funcion

function caracter(campo){

  var checkOK = "ABCDEFGHIJKLMN�OPQRSTUVWXYZ�����abcdefghijklmn�opqrstuvwxyz����� ";
  var checkStr = document.getElementById(campo).value;
  var obj=document.getElementById(campo);
  var allValid = true;
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
  }
  if (!allValid)
  {
	//campo.style.backgroundColor='#F9E9B8';
    foco(obj);
    return false;
  }
//  campo.style.backgroundColor='#FFFFFF';
  return true;
};

function alfanumerico(campo){

  var checkOK = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz�����0123456789 .,-/*++/;[]{}$#@|!?��'\�_()";
  var checkStr = document.getElementById(campo).value;
  var obj=document.getElementById(campo);
  var allValid = true;
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
  }
  if (!allValid)
  {
	//campo.style.backgroundColor='#F9E9B8';
   foco(obj);
    return false;
  }
  //campo.style.backgroundColor='#FFFFFF';
  return true;
};

function numerico(campo){

//  var checkOK = "0123456789.,- ";
    var checkOK = "0123456789.,";
  var checkStr = document.getElementById(campo).value;
  var obj=document.getElementById(campo);
  var allValid = true;
 // var allNum = "";
  for (i = 0;  i < checkStr.length;  i++)
  {
    ch = checkStr.charAt(i);
    for (j = 0;  j < checkOK.length;  j++)
      if (ch == checkOK.charAt(j))
        break;
    if (j == checkOK.length)
    {
      allValid = false;
      break;
    }
    //allNum += ch;
  }
  if (!allValid)
  {
//  	campo.style.backgroundColor='#F9E9B8';
	foco(obj);
    return false;
  }
  //  campo.style.backgroundColor='#FFFFFF';
	return true;
};

function foco(campo){
a=campo;
setTimeout('a.focus()',75);
return false;
};




//onKeyPress="return(formato_moneda(this,',','.',event))"
function formato_moneda(fld, milSep, decSep,e) {
	var bandera=0;
	var num_dec=0;
	var comas=0;
	var comas2=0;
	var campo='';
	var aux_entero=0;
	var parte_entera='';
	var num_max_dec=2;
    var sep_dec = ',';
    var key = '';
    var i = j = 0;
    var len = len2 = 0;
    var strCheck = '0123456789,';
    var aux = aux2 = '';
    var whichCode = (window.Event) ? e.which : e.keyCode;
    key = String.fromCharCode(whichCode); 
	if (whichCode == 13) return true; 						// Enter
	if (whichCode == 8) return true; 							// Enter
	if (whichCode == 46) key=',';						// Enter 
	if (whichCode == 0) return true; 					// Consigue el valor del codigo de tecla...
    if (strCheck.indexOf(key) == -1){ 
	return false; 	// no es una tecla valida	
	}	
	for(i=0;i<fld.value.length;i++){
		if(fld.value.charAt(i)=='.')
			comas2=comas2+1;
		}
	if(comas2>0){		
	campo_split=fld.value.split('.');
		for(i=0;i<=comas2;i++){
			campo+=campo_split[i];
		}
	}else
		campo=fld.value;
			
	if(sep_dec.indexOf(key)!= -1){
		if(campo.indexOf(key)!= -1){
			return false;
			}
	}		
	//tamaño del campo 
	if(campo.length>15)
		return false;
		
	if((campo+key).indexOf(',')!= -1)
		bandera=1;
	
	cadena=campo.split(',');
	
	if(bandera!=1)
		cadena[0]+=key;
	
	//calcular numero de comas
	for(i=(cadena[0].length)/3;i>1;i--)
		comas=comas+1;

	if(cadena[0].length%3==0)
		aux_entero=3;
	else
		aux_entero=(cadena[0].length%3);
				
	if(bandera!=1){
		for(i=0;i<(aux_entero);i++){
			parte_entera+=cadena[0].charAt(i);
		}
		if(cadena[0].length>3)
			parte_entera+='.';
			
		for(i=aux_entero,j=1;i<(cadena[0].length);i++,j++){
			parte_entera+=cadena[0].charAt(i);
			if(j%3==0&& cadena[0].length-1!=i){
				parte_entera+='.';
				}
			}
		
		campo_final=parte_entera;
		}
	else{
	for(i=0;i<(aux_entero);i++){
			parte_entera+=cadena[0].charAt(i);
		}
		if(cadena[0].length>3)
			parte_entera+='.';
			
		for(i=aux_entero,j=1;i<(cadena[0].length);i++,j++){
			parte_entera+=cadena[0].charAt(i);
			if(j%3==0&& cadena[0].length-1!=i){
				parte_entera+='.';
				}
			}
		if(cadena[1]!=undefined)
			len2=cadena[1].length;
		else len2=0;
		
		for(i=0;i<len2;i++){
				num_dec++;
			}
		if(num_dec>=num_max_dec)
			return false;
		if(cadena[1]!=undefined)
			campo_final=(parte_entera+','+cadena[1]+key);
		else
			campo_final=(parte_entera+',');
	}
	
	fld.value=campo_final;		
	return false;
}

//onKeyPress="return(formato_telefono(this,'tel','-',event))"
//onKeyPress="return(formato_telefono(this,'cel','-',event))"
function formato_telefono(fld, tipo, decSep, e) {
    var sep = 0;
    var key = '';
    var i = j = 0;
    var len = len2 = 0;
    var strCheck = '0123456789';
    var aux = aux2 = '';
    var whichCode = (window.Event) ? e.which : e.keyCode;
    if (whichCode == 13) return true; 						// Retorno carro
	if (whichCode == 8) return true; 							// Backspace
	if (whichCode == 45) return true;						// guion
	if (whichCode == 0) return true; 							// nulo
    key = String.fromCharCode(whichCode); 				// Consigue el valor del codigo de tecla...( tecla q pulsa)
    if (strCheck.indexOf(key) == -1) return false; 	// no es una tecla valida
    len = fld.value.length;//longitud
    
    for(i = 0; i < len; i++)
     if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
    aux = '';
    for(; i < len; i++)
     if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
     aux += key;//aux numero marcados por el usuario
    len = aux.length;
    if(tipo =='tel'){
        if (len == 0) fld.value = '';
        if (len < 4) fld.value = aux ;
        //if (len == 3) fld.value = aux ;
        //if (len == 2) fld.value = aux +"-";
        if (len > 3) {
            if(len%2 == 1)fld.value += key  ;
            if(len%2 == 0)fld.value += decSep + key  ;
          
        }
    }
    if(tipo =='cel'){
        
        if (len == 0) {
            if(key == 4){
                fld.value = '04';
            }
        }
        
        if (len < 4) fld.value = aux ;
        if (len == 4)fld.value += decSep + key  ;
        if (len > 4  && len < 7 ) {
            fld.value +=  key  ;
        }
        if (len > 6) {
            if(len%2 == 0)fld.value += key  ;
            if(len%2 == 1)fld.value += decSep + key  ;
          
        }
    }
    return false;
}

function tel_cel_formato(valor,tipo,decSep){
    //Convierte en formato celular o formato telefono local dependiendo.
    var count = 0, invertido = "";
    
   for(count = valor.length ; count > 0; count--){
    
    invertido+=valor.substring(count,count-1);
   }
    
    //valor = invertido;
    
    longitud = valor.length;//longitud
    
    var len, fld=0, arreglo=0, aux="";
    for(len=0; len < longitud; len++){
        
        if(tipo=='tel'){
              arreglo = valor.split("");
            
              aux += arreglo[len];
                
              if (len == 0) fld = '';
              if (len < 3) fld = aux ;
              
              if (len > 2) {
                  if(len%2 == 0)fld += arreglo[len] ;
                  if(len%2 == 1)fld += decSep + arreglo[len] ;
              }
                
        }//si es para telefonos
        if(tipo=='cel'){
              arreglo = valor.split("");
            
              aux += arreglo[len];
                
              if (len == 0) fld = '';
              if (len < 3) fld = aux ;
              
              //se agrega el guion a los 3 siguientes numeros luego del identiicador de operado (0414 - 555)
              if(len == 3)fld += decSep + arreglo[len] ;
              if(len > 3 && len < 6)fld += arreglo[len] ;
              
              if (len > 5) {//si es mayor a la 5 posisicon se coloca el separador cada 2 numeros
                  if(len%2 == 1)fld += arreglo[len] ;
                  if(len%2 == 0)fld += decSep + arreglo[len] ;
              }
         
        }//si es para celulares
        
    }//llave de ciclo for
    return fld;
}

//funcion que convierte las cantidades en formato 1.000,23 ---> 1000.23
//number_formatjs(this.value)
function number_formatjs(valor){
 var aux = valor.split(",");
 if( aux.length == 0 ){
  return 0;
 }
 
 for(i=0;i<aux.length;i++){
  
  //Valores enteros
  if (i==0){
   var auxi = aux[i].split(".");
   var acum = '';
   for (j=0;j<auxi.length;j++){
    acum+= auxi[j];
   }
   
   if(Number(acum)<=0){
    acum = 0;
   }
  }
  
  //Valores decimales
  if(i==1){
   acum = acum + "." + aux[i];
  }
  
 }
 return parseFloat(acum);
}
//funcion que convierte las cantidades en formato 1000.23 ---> 1.000,23
//number_formatjs_esp_v2(this) la iferenciaes q se le pasa el valor
//la diferencias es q se le pas el valor (value) directametne y no el objeto.
function number_formatjs_esp_v2(valor){
 var aux = valor.split("."); // se separan los enteros de los decimales
 var acum="";

 var j = aux[0].length; 
 
 // ciclo que coloca . a los miles de la parte entera
 for (i=0;i<aux[0].length;i++){
 
  if (j % 3 == 0 && aux[0].length != 3){
   
   acum += ".";
  }
  
  acum += aux[0].charAt(i);
  j--;
 }
 // si no hay decimales se colocan dos ceros por defecto
 if (!aux[1]){
  aux[1]="00";
 }
 // si el primer caracter queda como . se le quita
 if (acum.charAt(0) == "."){
   acum = acum.substring(1);
 }
  
 return acum+","+aux[1];
}




//funcion que convierte las cantidades en formato 1000.23 ---> 1.000,23
//number_formatjs_esp(this)
function number_formatjs_esp(obj){
 
 var valor = obj.value;
 var aux = valor.split("."); // se separan los enteros de los decimales
 var acum="";
 var j = aux[0].length; 
 
 // ciclo que coloca . a los miles de la parte entera
 for (i=0;i<aux[0].length;i++){
 
  if (j % 3 == 0 && aux[0].length != 3){
   
   acum += ".";
  }
  
  acum += aux[0].charAt(i);
  j--;
 }
 // si no hay decimales se colocan dos ceros por defecto
 if (!aux[1]){
  aux[1]="00";
 }
 // si el primer caracter queda como . se le quita
 if (acum.charAt(0) == "."){
   acum = acum.substring(1);
 }
  
 return acum+","+aux[1];
}


function tamano_tlf(campo){
if (campo.value != ""){
	if (campo.value.length < 7){
		alert("El campo "+campo.title+" debe contener un maximo de "+campo.maxLength+" o minimo de 7 caracteres");

//	setTimeout('campo.select()',75)
	setTimeout('campo.focus()',75)

		return false;
	}else if (campo.maxLength < campo.value.length ){
		alert("El campo "+campo.title+" debe contener un maximo de "+campo.maxLength+" o minimo de 7 caracteres");

	//setTimeout('campo.focus()',75)
	setTimeout(campo.select(),75)

		return false;
		}
}
}


function tamano_tlfno(campo1){
//num(document.form.TELF_HAB,'Tel�fono de Habitaci�n');
var campo=document.getElementById(campo1);
//campo.focus()
if (campo.value != ""){
	if (campo.value.length < 7){

	alert("El campo "+campo.title+" debe contener un maximo de "+campo.maxLength+" o minimo de 7 caracteres");

 a=	document.getElementById(campo1);
setTimeout('a.focus()',75);
setTimeout('a.select()',75);

		return false;
	}else if (campo.maxLength < campo.value.length ){
		alert("El campo "+campo.title+" debe contener un maximo de "+campo.maxLength+" o minimo de 7 caracteres");

 a=	document.getElementById(campo1);
setTimeout('a.focus()',75);
setTimeout('a.select()',75);

		return false;
		}
}
}
function tamano_cod_tlf(campo1){
	//&& (campo.value != "")
	var campo=document.getElementById(campo1);
	if ((campo.maxLength != campo.value.length) && (campo.value != "")) {

		alert("El campo "+campo.title+" debe contener "+campo.maxLength+" caracteres");

 a=	document.getElementById(campo1);
setTimeout('a.focus()',75);
setTimeout('a.select()',75);
		return false;
	}
}


// Función que abre una ventana simple pasandole el url, y las dimensiones para agregar una nota al trámite
function ventanaSecundaria(URL,ventana,W,H){
   window.open(URL,ventana,"width="+W+", height="+H+",scrollbars=yes")
}


function ventanaSecundariaV2(URL,ventana,W,H,t,l){

   //alert(URL+","+ventana+",width="+W+", height="+H+",scrollbars=yes,left = "+l+",top = "+t);
   
   window.open(URL,ventana,"width="+W+", height="+H+",scrollbars=yes,left = "+l+",top = "+t);
}
  

// Función que abre una ventana simple pasandole el url, y las dimensiones para VISIALIZAR UN PDF CON SROLLBARS
function ventanaSecundariaPDF(URL,ventana,W,H){
   window.open(URL,ventana,"width="+W+",height="+H+",scrollbars=YES directories=YES menubar=YES toolbar = YES location = YES resisable = YES")
}

/*
Objetivo: Permite aceptar en un objeto tipo "text" mediante el evento onKeyPress y seg�n el parametro "t" ciertos caracteres.
Metodo: onKeyPress="return(formato_campo(this,event,1))"
		donde "1" es el tipo de caracter que aceptara el objeto.
*/
function formato_campo(fld,e,t) {

    var aux = aux2 = '';
    var i = j = 0;
    //alert('opc: '+'1');
    switch(t)
    {
        case 1:
            var strCheck = '0123456789';
            //alert('opc: '+'1');
            break;
        case 2:
            var strCheck = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz ';
            //alert('opc: '+'2');
            break;
        case 3:
            var strCheck = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz0123456789 ';
            //alert('opc: '+'3');
            break;
        case 4:
            var strCheck = '0123456789-ext';
            //alert('opc: '+'4');
            break;
        case 5:
            var strCheck = '0123456789.';
            //alert('opc: '+'5');
            break;
        case 6:
            var strCheck = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz0123456789';
            //alert('opc: '+'6');
            break;
        case 7:
            var strCheck = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚabcdefghijklmnñopqrstuvwxyzáéíóú0123456789 ,.?¿!¡()-_/';
            //alert('opc: '+'7');
            break;
        case 8:
            var strCheck = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789';
            //alert('opc: '+'8');
            break;
        case 9:
            var strCheck = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚabcdefghijklmnñopqrstuvwxyzáéíóú ';
            //alert('opc: '+'9');
            break;
        case 10:
            var strCheck = 'abcdefghijklmnopqrstuvwxyz0123456789';
            //alert('opc: '+'10');
            break;
        case 11:
            var strCheck = '0123456789-';
            //alert('opc: '+'11');
            break;
        case 12:
            var strCheck = '0123456789-VJGPEvjgpe';
            //alert('opc: '+'12');
            break;
        case 13:
            var strCheck = '0123456789.';
            //alert('opc: '+'13');
            break;
        case 14:
            var strCheck = 'abcdefghijklmnopqrstuvwxyz0123456789 _-@.';
            //alert('opc: '+'14');
    }

    var evento = e || window.event;
    var whichCode =  e.charCode || e.keyCode;
    //alert(whichCode);
    if (whichCode == 13) return true; 					// Borrar
    if (whichCode == 8) return true; 					// Enter
    if (whichCode == 46) return true;					// Supr
    if (whichCode == 0) return true; 					// Tab
    if (whichCode == 9) return true; 					// Tab
    if (whichCode == 37) return true; 					// flecha izquierda
    if (whichCode == 39) return true; 					// flecha derecha
    
    key = String.fromCharCode(whichCode); 				// Consigue el valor del codigo de tecla...
    //alert('key='+key);
    if (strCheck.indexOf(key) == -1) return false; 		// no es una tecla valida
    fld.value += aux2.charAt(i);
}

function number_format( number, decimals, dec_point, thousands_sep ) {
	// http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://crestidg.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // *     example 1: number_format(1234.5678, 2, '.', '');
    // *     returns 1: 1234.57

    var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "," : dec_point;
    var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;

    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}
function str_replace(search, replace, subject) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hello, mars'

    var __regexp_escape = function(text) {
        if (!arguments.callee.sRE) {
            var specials = [
                '/', '.', '*', '+', '?', '|',
                '(', ')', '[', ']', '{', '}', '\\'
            ];
            arguments.callee.sRE = new RegExp(
                '(\\' + specials.join('|\\') + ')', 'g'
            );
        }
      return text.replace(arguments.callee.sRE, '\\$1');
    };

    var numreplx, numon, fincods, k;

    if(!(replace instanceof Array)){
        replace = new Array(replace);
        if(search instanceof Array){
            // If search is an array and replace is a string,
            // then this replacement string is used for every value of search
            while(search.length>replace.length){
                replace[replace.length]=replace[0];
            }
        }
    }

    if(!(search instanceof Array)){
        // put search string in an array anyway
        search = new Array( search );
    }
    while( search.length > replace.length ){
        // If replace has fewer values than search,
        // then an empty string is used for the rest of replacement values
        replace[replace.length] = '';
    }

    if(subject instanceof Array){
        // If subject is an array, then the search and replace is performed
        // with every entry of subject , and the return value is an array as well.
        for(k in subject){
            subject[k] = str_replace(search, replace, subject[k]);
        }
        return subject;
    }

    // Each entry was originally replaced one after another, rather than all at once.
    // This created a problem: str_replace(["{name}","l"], ["hello","m"], "{name}, lars")
    // Theoretically, the code should return "hello, mars", but instead it returned "hemmo, mars"
    // as pointed out and fixed by Philip Peterson:
    numreplx = search.length;
    numon = 0;
    fincods = new Array();
    while( fincods.length < numreplx ){
        nsub = subject;
        for( x = 0; x < fincods.length; x++ ){
            nsub = nsub.replace(new RegExp(__regexp_escape(search[x]), "g"), "[cod"+fincods[x]+"]");
        }
        for( x = 0; x < fincods.length; x++ ){
            nsub = nsub.replace(new RegExp(__regexp_escape("[cod"+fincods[x]+"]"), "g"), replace[x]);
        }

        if( nsub.indexOf("[cod"+numon+"]") == -1 ){
            fincods[fincods.length]=numon;
        }
        numon++;
    }
    for( x = 0; x < fincods.length; x++ ){
        subject=subject.replace(new RegExp(__regexp_escape(search[x]), "g"), "[cod"+fincods[x]+"]");
    }
    for( x = 0; x < fincods.length; x++ ){
        subject=subject.replace(new RegExp(__regexp_escape("[cod"+fincods[x]+"]"), "g"), replace[x]);
    }
    return subject;
}